home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d17 / pslabel.arc / PMLABEL.PAS < prev    next >
Pascal/Delphi Source File  |  1986-11-08  |  5KB  |  166 lines

  1. program PrintPM;  { print a graphic mailing labels }
  2.    { All commands are for an Epson FX-185 printer }
  3.  
  4. { Copyright (c) 1986   Clint Hastings - Salt Lake City, Utah }
  5. { Permission granted for all use of a non-commercial nature. }
  6.  
  7.  
  8. type  CPUreg = record  case boolean of
  9.                  false: (ax,bx,cx,dx,bp,si,di,ds,es,flags : integer);
  10.                  true:  (al,ah,bl,bh,cl,ch,dl,dh          : byte)
  11.                end;
  12.      PMpic = record
  13.                d1 : array[0..3] of byte;  { dummy info }
  14.                p : array[0..51,0..10] of byte;
  15.                d2 : byte;
  16.              end;
  17.  
  18. { the lines can be spaced to suit your needs but they aren't full-height
  19.   lines, so don't use them all. These are the default lines - just hit
  20.   <RETURN> instead of typing in new lines. }
  21.  
  22. const LabelLine : array[0..17] of string[40] =
  23.                  ('',
  24.                   '',
  25.                   '         Clint & Nina Hastings',
  26.                   '',
  27.                   '',
  28.                   '',
  29.                   '          203 East 3rd Avenue',
  30.                   '',
  31.                   '',
  32.                   '',
  33.                   '           SLC, Utah  84103',
  34.                   '',
  35.                   '',
  36.                   '',
  37.                   '',
  38.                   '',
  39.                   '',
  40.                   '');
  41.  
  42. var  reg : CPUreg;
  43.      filename : string[80];
  44.      screen : byte absolute $B800:0;
  45.      g, n, Graphic, NumLabels,
  46.      Col, Row, x, len1, len2 : integer;
  47.      pf : file of PMpic;
  48.      pic : PMpic;
  49.      FileDrive, sameG : string[1];
  50.      same : boolean;
  51.  
  52. procedure PrintPSGraphic(n : integer);
  53. const BitMask : array[0..7] of byte =
  54.            ($80, $40, $20, $10, 8, 4, 2, 1);
  55.  
  56. var  TempY : array[0..3] of byte;
  57.      temp,b : byte;
  58.      buf : array[0..127] of byte;
  59.      BufPtr, step, y, x, p, i, j : integer;
  60.      ch : char;
  61.  
  62. begin
  63.   for y := 0 to 12 do BEGIN                { 52 rows @ 4 dots per row }
  64.   if LabelLine[y] <> '' then
  65.       write(lst,LabelLine[y],#13);
  66.     write(lst,#27'L',chr(len1),chr(len2));
  67.     for x := 0 to 10 do BEGIN
  68.            for i := 0 to 3 do  { get next line }
  69.               TempY[i] := pic.p[ y*4+i, x];
  70.            for j := 0 to 7 do BEGIN
  71.              temp := 0;
  72.              for i := 0 to 3 do
  73.                if (TempY[i] AND (1 shl (7-j)) ) <> 0 then
  74.                    temp := temp + (1 shl (3-i));
  75.              write(lst,chr(temp))
  76.              END;
  77.       END;
  78.     writeln(lst)
  79.     END;
  80.   for y := 13 to 17 do BEGIN     { spacing for label }
  81.       if LabelLine[y] <> '' then
  82.           write(lst,LabelLine[y],#13);
  83.     writeln(lst)
  84.     END;
  85.   if not same then read(pf,pic);
  86. end;
  87.  
  88. procedure InfoScreen;
  89. begin
  90.   gotoxy(4,1);
  91.   writeln('Copyright (c) 1986 - Clint Hastings - Salt Lake City, Utah');
  92.   gotoxy(5,3);
  93.   writeln('**********  PRINTMASTER  LABEL  MAKER  ****************');
  94.   writeln;
  95.   writeln('    This program lets you print mailing labels using');
  96.   writeln('    PrintMaster graphics for decoration. You can print');
  97.   writeln('    as many labels as you want. The graphic can be the');
  98.   writeln('    same on each label, or can move sequentially through');
  99.   writeln('    the graphic file starting at a given graphic. It can');
  100.   writeln('    use the default graphic files - hit <RETURN> in response');
  101.   writeln('    to graphic file?. You can use the Art Gallery by typing');
  102.   writeln('    U or S. Graphic file drive - type A,B,C, etc., but no');
  103.   writeln('    colon is necessary.    Have fun!!!');
  104.   writeln('NOTE:');
  105.   writeln('    Printer codes are for Epson FX printers. Source code');
  106.   writeln('    in Turbo Pascal is provided for you to make necessary');
  107.   writeln('    changes for other printers. Set NLQ beforehand if you');
  108.   writeln('    want the address lines to be in NLQ.');
  109.   writeln;
  110.   writeln
  111. end;
  112.  
  113. procedure Setup;
  114. var  line : string[40];
  115. begin
  116.   write(lst,#27'A'#4);     { 4 dots vertical - line spacing }
  117.   len1 := (11*8) mod 256;  { calculate number of dots per line }
  118.   len2 := (11*8) div 256;
  119.  
  120.   InfoScreen;
  121.   writeln;
  122.   writeln('    PRINTMASTER LABEL MAKER');
  123.   write(#13#10'    Number of Labels to print ? ');
  124.   readln(NumLabels);
  125.   write(#13#10'    Graphic to print ? ');
  126.   readln(Graphic);
  127.   Graphic := Graphic - 1;
  128.   write(#13#10'    Graphic file (U,S) ? ');
  129.   readln(FileName);
  130.   write(#13#10'    Graphic file drive ? ');
  131.   readln(FileDrive);
  132.   if FileName = '' then  FileName := FileDrive + ':slib.shp'
  133.                    else  FileName := FileDrive + ':' + FileName + 'lib.shp';
  134.  
  135.   assign(pf,FileName);
  136.   {$I-}  reset(pf);  {$I+}
  137.   if IOresult <> 0 then HALT;
  138.  
  139.   seek(pf,Graphic);
  140.   read(pf,pic);
  141.  
  142.   writeln(#13#10'3 label lines :');
  143.   readln(line);
  144.   if line <> '' then BEGIN
  145.       LabelLine[2] := '         ' + line;
  146.       readln(line);
  147.       LabelLine[6] := '         ' + line;
  148.       readln(line);
  149.       LabelLine[10] := '         ' + line;
  150.       END;
  151.   write(#13#10'All the same graphic (y/n) ? ');
  152.   readln(sameG);
  153.   same := (sameG <> 'n') and (sameG <> 'N');
  154. end;
  155.  
  156. begin
  157.   ClrScr;
  158.   Setup;
  159.  
  160.   for n := Graphic to Graphic-1+NumLabels do  PrintPSGraphic(n);
  161.  
  162.   close(pf);
  163.   write(lst,#27'2');  { restore regular line spacing }
  164. end.
  165.  
  166.